package mao.reflection;

import java.lang.reflect.Constructor;
import java.lang.reflect.Method;

/**
 * @author Totoro
 * @date 2020/7/6
 * @explain:
 */
public class TestReflection {
    public static void main(String[] args) throws Exception{
        String str = "Hello";
        Method toUpperCase = String.class.getDeclaredMethod("toUpperCase");
        Object invoke = toUpperCase.invoke(str);
        System.out.println(invoke);

        //通过反射创建对象
        String s = String.class.newInstance(); //默认使用无参数构造函数。
        System.out.println(s);
        //getDeclaredConstructor返回
        String s1 = String.class.getDeclaredConstructor(String.class).newInstance("33");
        System.out.println(s1);
        Constructor<String> constructor = String.class.getConstructor(String.class);
        String s2 = constructor.newInstance("44");
        System.out.println(s2);

        //尝试获取私有构造方法,并设置访问权限。
        Constructor<CLassTobeReflect> cons = CLassTobeReflect.class.getDeclaredConstructor(int.class);
        cons.setAccessible(true);
        System.out.println(cons.newInstance(22).a);
    }
}
